home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / sc_22.zip / HISTORY < prev    next >
Text File  |  1988-08-06  |  8KB  |  118 lines

  1. Small-C Revision History
  2.  
  3.  -- included in version 2.2
  4.  
  5.  76 Modified _read() in CSYSLIB.C to do console input through _getkey()
  6.     for consistent handling of special key values per the MS-DOS addendum
  7.     to the Small-C Handbook.
  8.  77 Modified fgetc() in FGETC.C to look for an ungotten character and
  9.     return it without cooking it (since it cooked on the original get).
  10.     This fixed an apparent problem in scanf() and fscanf() in which
  11.     they appear to miss input characters.
  12.  78 Revised out_code() and do more optimizing.  Let p-code subscript code[],
  13.     (an array of pointers to output assembly code strings) instead of using
  14.     a monstrous switch statement.
  15.  79 Always compile features that are now considered standard.
  16.  80 Properly calculate swend in main() to use all of the switch table.
  17.  81 Dropped unnecessary variable func1.
  18.  82 Changed if(match(...)); to match(...); statements.
  19.  83 Dropped unnecessary while loop in declloc().
  20.  84 Simplified treatment of argument "dim" in initials().
  21.  85 Dropped outside() because it is redundant with code in compound().
  22.  86 Revised the point at which lval2[] is declared in plnge(), and hier14()
  23.     to greatly reduce the amount of stack space used during expression
  24.     analysis by allocating lval[] arrays only when actually needed. 
  25.  87 Simplified logic in newfunc(), doif(), dodo(), preprocess(), skip(), 
  26.     plnge(), expression(), hier14(), primary(), pstr(), white().  
  27.  88 Modified primary() to add an undeclared function to the symbol table only 
  28.     if the name is not already in the table.  This improves run time by 
  29.     saving a table lookup on most function references.  
  30.  89 Reorganized source code into four files (CC1.C, CC2.C, CC3.C, CC4.C),
  31.     regrouped functions into more logical units, and renamed some functions
  32.     (addmac->dodefine, newfunc->dofunction, rvalue->fetch, pstr->chrcon,
  33.     qstr->string, needtoken->need, col->colon, ol->outline, junk->skip).
  34.  90 Improved output efficiency by deleting cout(), sout(), and xout().
  35.     It now checks for an output error only at the end of a line.
  36.  91 Dropped assignment statements in main() that set globals to zero.
  37.  92 Revised ispunct() to exclude white space from the 'true' condition.
  38.  93 Combined all of the is...() character classification functions into a
  39.     single module of short, fast functions that subscript into an array
  40.     for the answer.  This approach is three times faster.
  41.  94 Per Kiyoshi Akima, eliminated LINK module from library.  Now, trailer()
  42.     declares _MAIN to be external if main() is declared in the module being 
  43.     compiled; this forces CSYSLIB to load when linking.  By not declaring it 
  44.     external in other modules, a "multiply defined" error is eliminated when 
  45.     compiling CSYSLIB which contains _MAIN.  However, since .OBJ modules
  46.     which were compiled with earlier versions of Small-C contain references to 
  47.     __LINK, it is declared as a dummy entry point in CALL.ASM to avoid 
  48.     "unresolved reference" errors at link time.
  49.  95 Per Kiyoshi Akima, installed additional code optimizing.
  50.  96 Dropped setops() in favor of initializing the op[] and op2[] arrays.
  51.     This can be done since these arrays now contain p-codes rather than
  52.     function addresses.
  53.  97 Yet another rewrite of the the optimizer.  It's now much smaller, each 
  54.     optimization is cheaper, the logic is clearer and more bullet proof.
  55.     And, yet more optimizations.  EXE sizes are down by 10% and execution times
  56.     are down by as much as 25%.
  57.  98 Renamed CC.DEF to CC.H and CLIB.DEF to CLIB.H.
  58.  99 Corrected unlink() to return ERR on failure instead of EOF.
  59. 100 Revision 76 slowed down the reading of files considerably by introducing
  60.     an additional call to iscons() for every character read.  It was discovered
  61.     that the DOS interrupt in this function is very very slow.  So, iscons()
  62.     was revised to call DOS only the first time for a file, and then test
  63.     the rememberred answer thereafter.  This required changes to CSYSLIB.C
  64.     also.  The effect was a DOUBLING OF I/O SPEED DURING READS, compared to
  65.     revision level 75 -- BEFORE the slowdown was introduced.  This shows that
  66.     the existing calls to iscons() in fgetc() and fgets() have been a major
  67.     bottleneck all along.
  68. 101 Added the "unsigned" integer and character data types.  These result in
  69.     unsigned <, <=, >, >=, *, /, % operations and yield unsigned results.
  70. 102 Revised the handling of numeric constants to recognize values from
  71.     32768 to 65535 as unsigned.  These, likewise, produce unsigned operations
  72.     and yield unsigned results.
  73. 103 Cleaned up the handling of non-definitional function declarations.  The 
  74.     syntax (*func)(), which specifies a pointer to a function, is now accepted 
  75.     only for function arguments.  Previously, it was accepted at the global and 
  76.     local levels, but not interpreted as a pointer.
  77. 104 Reject instances of declarations, such as *func(), which have multiple
  78.     modifiers.  Previously, the right most modifier prevailed.  But it is 
  79.     better to reject something than to interpret in differently than it is
  80.     written.
  81. 105 Accept "void" before function header as comment.
  82. 106 Corrected an error in the expression analyzer which causes pointer offsets
  83.     to be lost when subscripting is applied; e.g., (ptr+5)[x] would lose the
  84.     offset 5.
  85. 107 Revised the implementation of the sizeof() operator so it works correctly.
  86.     Although undocumented, this was in the original MS-DOS compiler.
  87. 108 Always pass an argument count to functions, even if NOCCARGC is defined.
  88.     This is not very costly on 8086 family CPUs and it eliminates a lot of
  89.     headaches when you call printf() but forget that NOCCARGC is defined.
  90. 109 Small-C programs now abort with a return code of 1 for memory overflows
  91.     and 2 for operator interruptions (control-C).
  92. 110 Revised strlen() to use the 8086 "REPNE SCASB" prefix/instruction for 
  93.     the fastest possible operation.  Sped it up over 500%.
  94. 111 Any redirection of stdout overrides the assumed output of the compiler,
  95.     not just redirections to disk files.
  96. 112 Revised hier2() (now called level2()), which processes the ?: operator,
  97.     so that it groups properly from right to left and yields meaningful
  98.     attributes for further expression analysis.  This involved imposing
  99.     consistency restrictions on the second and third expressions.
  100. 113 Revised dogoto(), dolabel(), and addlabel() to catch duplicate label
  101.     definitions.
  102. 114 Revised outname() to write names to the output file without forcing them to 
  103.     uppercase.  Except for this function, the compiler was already case 
  104.     sensitive.  Also recompiled and assembled the library with lowercase names.
  105. 115 Modified the p-code translation strings containing "CALL xxx", where xxx
  106.     is a CALL module entry point, so that xxx is in lower case.  This 
  107.     eliminates errors when case sensitivity is specified to the assembler and
  108.     the linker.
  109. 116 Made minor revisions to allow command-line switches to be introduced by
  110.     slashes (/) as well as hyphens (-).  This is consistant with the Small
  111.     Assembler which accommodates slashes for consistency with the PC/MS-DOS
  112.     linker which it employs.
  113. 117 Revised optimization cases 31 thru 33 to prevent generating corrupt code 
  114.     for statements like ++x[4]; where x[] is local.  Previously this statement 
  115.     would update the wrong memory location.  Deleted cases 31 and 32, and 
  116.     changed case 33 to do less optimizing.  Renumbered cases 33 thru 49 as
  117.     31 thru 47.  
  118.